﻿/*
 *  ============================================================================
 *  Name:           Gestão de parques de estacionamento
 *  Author:         João Faria
 *  Email:          a8836@alunos.ipca.pt
 *                  jfaria.gmr@gmail.com
 *  Version:        0
 *  Date:           2013-04-10
 *  Copyright:       
 *  Description:    IPCA - Programação II
 *                  Projecto final
 *  ============================================================================
 */
using System;
using System.Collections.Generic;
using GesParking.BusinessObjects;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace GesParking.DataLayer
{
    /// <summary>
    /// Classe que armazena um historico de parqueamentos
    /// </summary>
    [Serializable]
    public class HistoryParkingsDL
    {
        #region Estado

        static bool alterado;
        static List<ParkingRegistryBO> listParkings;

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor por omissão
        /// </summary>
        public HistoryParkingsDL()
        {
            alterado = true;
            listParkings = new List<ParkingRegistryBO>();
        }

        #endregion

        #region Propriedades

        /// <summary>
        /// Propriedade alterado
        /// </summary>
        public static bool Alterado
        {
            get { return alterado; }
            set { alterado = value; }
        }

        #endregion

        #region Metodos
        
        /// <summary>
        /// Adciona novo registo de estacionamento
        /// </summary>
        /// <param name="p">Registo</param>
        /// 
        public static void AddDL(ParkingRegistryBO p)
        {
            listParkings.Add(p);
        }

        /// <summary>
        /// Lista todos os registos
        /// </summary>
        /// <returns>Lista de Registos</returns>
        public static List<ParkingRegistryBO> ListDL()
        {
            return listParkings;
        }

        /// <summary>
        /// Grava os dados do historico de estacionamentos
        /// </summary>
        public static void SaveHistory()
        {
            /* 
             * Falta tratar erros com acessos e permissões de ficheiros
             */
            FileStream fsHistoryParkingsDL = new FileStream(@"Data\HistoryParking.dat", FileMode.Create);
            BinaryFormatter bfwHistoryParkingsDL = new BinaryFormatter();
            bfwHistoryParkingsDL.Serialize(fsHistoryParkingsDL, listParkings);
            fsHistoryParkingsDL.Close();
        }

        /// <summary>
        /// Classe que lê os dados do historico de estacionamentos
        /// </summary>
        public static void ReadHistory()
        {
            /* 
             * Falta tratar erros com acessos e permissões de ficheiros
             */
            FileStream fsHistoryParkingsDL = new FileStream(@"Data\HistoryParking.dat", FileMode.Open);
            BinaryFormatter bfwHistoryParkingsDL = new BinaryFormatter();
            listParkings = (List<ParkingRegistryBO>)bfwHistoryParkingsDL.Deserialize(fsHistoryParkingsDL);
        }

        #endregion
    }
}
